#ifndef MAINSCENE_H
#define MAINSCENE_H

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QBoxLayout>
#include <QPushButton>
#include <QTimer>

#include "config.h"
#include "map.h"
#include "role.h"
#include "bullet.h"
#include "enemy1.h"
#include "enemy2.h"
#include "enemy3.h"
#include "boss.h"
#include "enemyattack2.h"
#include "enemyattack3.h"
#include "bossattack.h"
#include "sxs.h"
#include "bomb.h"
#include <bossbomb.h>

class Mainscene : public QWidget
{
    Q_OBJECT

public:
    Mainscene(QWidget *parent = nullptr);
    ~Mainscene();

    QPushButton *startButton=new QPushButton(this);
    QPushButton *introduceButton=new QPushButton(this);
    QPushButton *returnButton=new QPushButton(this);
    QLabel *label_introduce=new QLabel (this);
    QLabel *label_role_H=new QLabel(this);
    QLabel *label_boss_H=new QLabel(this);
    QLabel *m_gameOverMessageLabel=new QLabel(this);

    // 初始化场景
    void initScene();

    //启动游戏
    void playGame();

    //定时器
    QTimer m_timer;

    //更新坐标
    void updatePosition();

    //绘制到屏幕中
    void paintEvent(QPaintEvent *);//系统函数

    //鼠标移动事件
    void mouseMoveEvent(QMouseEvent *);//系统函数

    //地图对象
    map m_map;

    //角色对象
    role m_nkx;

    //子弹数组
    bullet m_bullets[BULLET_NUMBER];

    //子弹发射
    void shoot();

    //子弹发射间隔记录
    int m_shootrecorder=0;

    //敌人数组
    enemy1 m_enemys1[ENEMY_NUMBER];
    enemy2 m_enemys2[ENEMY_NUMBER];
    enemy3 m_enemys3[ENEMY_NUMBER];

    //敌人出场
    void enemyToScene();
    void enemy1ToScene();
    void enemy2ToScene();
    void enemy3ToScene();

    //敌人出现间隔记录
    int m_recorder=0;

    //boss对象
    boss m_Boss;

    //boss出场
    void bossToScene();

    //boss出场时间记录
    int m_Recorder=0;

    //2号敌人激光数组，3号敌人光波数组
    enemyattack2 m_enemyattacks2[ENEMY_NUMBER];
    enemyattack3 m_enemyattacks3[ENEMY_NUMBER];

    //boss月刃
    bossattack m_Bossattack;

    //boss发射月刃
    void bossshoot();

    //boss月刃间隔记录
    int m_bossshootrecorder=0;

    //瑟希斯对象
    sxs m_Sxs;

    //碰撞检测
    void collisionDetecction();

    //爆炸数组
    bomb m_bombs[BOMB_NUMBER];
    bossbomb m_bossbombs[BOMB_NUMBER];

    //更新血量显示
    void updateLabel();

    //记录游戏状态
    bool m_GameOver=false;
    bool m_GameWon=false;

    //检查并处理游戏结束
    void checkGameStatus();

};
#endif // MAINSCENE_H
